﻿using System.Reflection;
using Autofac.Core;
using BlogSystem.Common.Config.DI.annotation;

namespace BlogSystem.Common.Config.DI;

/// <summary>
/// IPropertySelector 查看属性上是否标注某一特性
/// 实现这个IPropertySelector，这个类可以被用作属性注入时的选择器，用于确定哪些属性应该被注入。
/// </summary>
public class AutowiredPropertySelector: IPropertySelector
{
    
    //实现了 IPropertySelector 接口的方法，用于判断是否应该对给定的属性进行注入。它接受两个参数：
    // propertyInfo：表示要检查的属性的信息。
    // instance：表示属性所属的对象实例。
    public bool InjectProperty(PropertyInfo propertyInfo, object instance)
    {
        //判断属性的特性是否包含自定义的属性,标记有返回true
        return propertyInfo.CustomAttributes.Any(s => s.AttributeType == 
                                                      typeof(AutowiredPropertyAttribute));
    }
}